C#で業務アプリを作るなら、 DevOps(CI/CD) を組み込むことで、 ビルド・テスト・デプロイを自動化できます。 ここでは GitHub Actions と Azure DevOps Pipelines を軸に、 実務で使える最小〜標準構成をまとめます。
・C#プロジェクトのCI(ビルド・テスト)
・GitHub Actionsでのワークフロー例
・Azure DevOps PipelinesでのYAMLパイプライン
・Web API / コンソール / WPFのデプロイ戦略
・ブランチ戦略(main / develop / feature)
・バージョニング・リリース運用の考え方
1. C# × DevOps(CI/CD)の全体像
- CI(Continuous Integration):プッシュごとにビルド・テスト
- CD(Continuous Delivery/Deployment):特定ブランチやタグで自動デプロイ
最低限やるべきことは、 「mainにマージされたらビルド+テスト」 です。 そこから段階的にデプロイを自動化していきます。
2. GitHub ActionsでC#のCIを組む
■ 2-1. 最小のCIワークフロー(.NETビルド+テスト)
.github/workflows/ci.yml
name: CI
on:
push:
branches: [ main, develop ]
pull_request:
branches: [ main, develop ]
jobs:
build:
runs-on: windows-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup .NET
uses: actions/setup-dotnet@v4
with:
dotnet-version: 8.0.x
- name: Restore
run: dotnet restore
- name: Build
run: dotnet build --configuration Release --no-restore
- name: Test
run: dotnet test --configuration Release --no-build
これで main / develop へのプッシュ・PR で 自動的にビルド&テストが走ります。
■ 2-2. アーティファクト(成果物)の保存
- name: Publish
run: dotnet publish src/MyApp/MyApp.csproj -c Release -o out
- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: myapp
path: out
ビルド済みバイナリをダウンロードして動作確認できます。
3. GitHub ActionsでWeb APIを自動デプロイ
ASP.NET Core Web API を Azure App Service にデプロイする例です。
■ 3-1. mainブランチへのプッシュでデプロイ
name: WebAPI-CD
on:
push:
branches: [ main ]
jobs:
deploy:
runs-on: windows-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-dotnet@v4
with:
dotnet-version: 8.0.x
- name: Publish
run: dotnet publish src/WebApi/WebApi.csproj -c Release -o out
- name: Deploy to Azure Web App
uses: azure/webapps-deploy@v3
with:
app-name: my-webapi-app
publish-profile: ${{ secrets.AZURE_WEBAPP_PUBLISH_PROFILE }}
package: out
mainにマージ → 自動デプロイ という流れが作れます。 ステージング環境を挟む場合は、ブランチや環境を分けて制御します。
4. Azure DevOps PipelinesでC#のCI/CD
■ 4-1. YAMLパイプライン(ビルド+テスト)
azure-pipelines.yml
trigger:
branches:
include:
- main
- develop
pool:
vmImage: 'windows-latest'
steps:
- task: UseDotNet@2
inputs:
packageType: 'sdk'
version: '8.0.x'
- task: DotNetCoreCLI@2
inputs:
command: 'restore'
projects: '**/*.csproj'
- task: DotNetCoreCLI@2
inputs:
command: 'build'
projects: '**/*.csproj'
arguments: '--configuration Release'
- task: DotNetCoreCLI@2
inputs:
command: 'test'
projects: '**/*Tests.csproj'
arguments: '--configuration Release'
■ 4-2. アーティファクト発行
- task: DotNetCoreCLI@2
inputs:
command: 'publish'
publishWebProjects: true
arguments: '--configuration Release --output $(Build.ArtifactStagingDirectory)'
zipAfterPublish: true
- task: PublishBuildArtifacts@1
inputs:
pathToPublish: '$(Build.ArtifactStagingDirectory)'
artifactName: 'drop'
Releaseパイプラインからこのアーティファクトを使ってデプロイできます。
5. ブランチ戦略と環境(dev / stg / prod)
■ 5-1. よくあるブランチ構成
- main:本番リリース用
- develop:開発統合
- feature/xxx:機能開発
CIは develop + main、 CDは main → 本番 / develop → ステージング という構成が定番です。
■ 5-2. 環境ごとの設定
- appsettings.Development.json
- appsettings.Staging.json
- appsettings.Production.json
CI/CDで ASPNETCORE_ENVIRONMENT を切り替えてデプロイします。
6. バージョニングとリリース運用
■ 6-1. Gitタグでバージョン管理
git tag v1.2.0
git push origin v1.2.0
タグをトリガーにして「リリースビルド+本番デプロイ」を走らせるパターンもよく使われます。
■ 6-2. csprojでVersionを管理
<PropertyGroup>
<Version>1.2.0</Version>
</PropertyGroup>
CIでこのVersionを読み取り、リリースノートやアーティファクト名に反映させることもできます。
7. C#プロジェクトで押さえておきたいCIチェック
- ビルド(Release)
- 単体テスト(xUnit / NUnit / MSTest)
- コード解析(Roslyn Analyzers / SonarQube)
- フォーマットチェック(dotnet format)
- セキュリティスキャン(依存パッケージ)
最初は「ビルド+テスト」だけでも十分価値があります。
8. 業務アプリ向けベストプラクティス
- main / develop に対して必ずCIを回す
- PR時にビルド・テストを自動実行(壊れたコードを防ぐ)
- Web APIは main マージでステージング or 本番に自動デプロイ
- デスクトップアプリはCIでインストーラ or zipを自動生成
- バージョンはGitタグ or csprojで一元管理
- ログ・監視(Application Insights / Log Analytics)とセットで運用
まとめ:C# × DevOps で“ビルド・テスト・デプロイの手作業”をなくす
- GitHub Actions / Azure DevOps どちらでもC#は相性抜群
- まずは「mainにプッシュ → CI」で小さく始める
- 慣れてきたらステージング・本番へのCDを段階的に導入
「毎回手でビルドしている」「デプロイ手順が属人化している」 という状態から抜け出すために、 C# × DevOps(CI/CD)は非常にコスパの良い投資になります。 この記事をベースに、あなたのプロジェクトに合ったパイプラインを設計してみてください。